# -*- coding: utf-8 -*-

"""
Nome do modulo: aula3a.py
Autor: Soraia Janeiro
Data: 10/10/2013
Obs: Exemplo de uma função recursiva
"""

def frec(l1, x, n):
    """
        frec - devolve uma lista com n elementos x
        x - o elemento a repetir
        n - numero de reoetições
    """

    if not n:
        return l1
    else:
        return [x] + frec(l1, x, n-1)
    pass
l2 = frec([], 'Bu ', 5)
print l2

'''
obs: recursividade de cauda
'''
def fatorial(n):
    if n <= 0:
        return 1
    else:
        return n * fatorial(n-1)
    pass

def fatorial_cauda(n):
    def fact(i=n, acc=1):
        if i == 0:
            return acc
        else:
            return fact(i-1, (acc * i))
        return fact()
    
print fatorial(5)
"""
'''
obs: iterador
'''
lista = ['a', 'b', 'c']
it = iter(lista)
print it
x1 = it.next()
print x1
x2 = it.next()
print x2

lista = ['a', 'b', 'c', 'd', 'e']
it = iter(lista)
x = it.next()
while it:
    print x
    x = it.next()
"""

'''
obs: listas e expressões de geração
'''
lista_linhas= ['     uma', '  duas', '      tres']
#expressao de geração: devolve o iterador
it = (linha.strip() for linha in lista_linhas)
print it.next() + it.next() + it.next()

total_letras = sum(len(linha.strip())
                   for linha in lista_linhas)
print "total letras {0}" .format(total_letras)

#compreensao de lista: devolve uma lista
lista = [linha.strip()
         for linha in lista_linhas
         if len(linha) > 7]
print lista


